package _11_整理题目._Spring基础原理._设计模式._01_策略模式._武器;

/**
 * 需求：一个 Person，可以切换不同的 Weapon
 * 设计模式：策略模式
 * 思路：定义一个 Weapon 接口，一个 useWeapon 方法
 *      然后 新设计的武器类 需要实现 Weapon 接口
 *
 *      定义 Person，
 *      内部组合 一个 Weapon 变量，用来注入不同的武器类
 *      一个 useWeapon 方法，用来调用注入的武器类的 useWeapon 方法
 *
 *      面向接口编程 + 多态的向上转型
 *
 * 为什么使用策略模式：
 *      也可以直接在武器类里写对应的方法，直接切换
 *      但是，那样需要频繁修改源码，如果是将 Weapon 整成 sdk 给别人调用
 *      就不能这样搞了，使用策略模式，可以直接创建新的武器类，
 *      注入到 Person 直接使用
 *
 * 特点：所有的武器都是实现的同一套接口
 *
 */
public class Test {
    public static void main(String[] args) {
        Person person = new Person();

        person.setWeapon(new Knife());
        person.useWeapon();

        person.setWeapon(new Sword());
        person.useWeapon();

        person.setWeapon(new Spear());
        person.useWeapon();
    }
}
